
package ChatGUI;



import javax.swing.*;
import java.awt.event.*;

/**
 * Classe utlisée pour la fenêtre de chat
 * @author Marion et Nicolas
 */

public class ChatWindow extends JFrame implements ActionListener, WindowListener {


private String remoteUser;
private ChatGUI gui;
// Objets utilises pour la fenêtre chat
private JLabel labelChat; 
private JTextField textToSend = new JTextField();
private JButton send = new JButton("Send");

private JTextArea areaConversation = new JTextArea();

/**
 * Création d'une fenêtre de chat
 * @param loginRemote
 * @param g
 */
public ChatWindow(String loginRemote, ChatGUI g){
       this.gui=g;
       this.remoteUser = loginRemote;
       init(loginRemote);
       textToSend.addActionListener(this);
       send.addActionListener(this);
       this.addWindowListener(this);
}


/**
 * Initialisation de la fenêtre de chat
 * @param login
 * @param alreadyOpen 
 */

 private void init(String login) {
     this.setSize(450,600);
     this.setTitle("Chat window with "+login);
     
     labelChat = new JLabel("You are chatting with "+login); 
     labelChat.setBounds(50,10,300,20);
     textToSend.setBounds(20,500,280,40);
     areaConversation.setBounds(0,0,0,0); //Taille reglable dans le scrool
     send.setBounds(310,500,110,40);
     areaConversation.setEditable(false);               // Pour qu'on ne puisse pas écrire dedans
     areaConversation.setLineWrap(true);
     
     JScrollPane scroll = new JScrollPane(areaConversation);
     scroll.setBounds(20,50,400,430);
     
     this.setLayout(null);   
     this.setLocationRelativeTo(null);          // Fenêtre centrée autour de l'écran
     this.add(labelChat);                           
     this.add(send);
     this.add(textToSend);
     //this.add(close);
     this.add(scroll);
 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);    // DISPOSE permet de ne pas fermer toute l'application                                                     // mais seulement la fenetre CHAT quand on clique sur la croix
 }

     
    
     /**
     * Affiche les message de la personne avec laquelle le localUer discute
     * @param mess 
     */
    public void afficheMessage (final String mess){ 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
        areaConversation.append(remoteUser+" says : "+mess+"\n");
        textToSend.setText("");  
            }
    });
}
    
 
    /**
     * Méthode de l'interface ActionListener,
     * effectue des actions différentes à l'arrivée d'évènements
     * @param e 
     */
@Override
    public void actionPerformed(ActionEvent e) {

                if(e.getSource() == textToSend){
                    e.setSource(send);            // Envoie quand on appuie touche "Entree"
                }
                
                if(e.getSource() == send){
                    String messToSend = textToSend.getText();
                    gui.performSendMessage(messToSend,remoteUser);
                    areaConversation.append(ChatGUI.logLocal+" says : "+messToSend+"\n"); // Append permet de concaténer
                    textToSend.setText("");                                               // Effacer le JTextField après envoie
                }
    }

   
 
/**   
 * Methode appelée lorsque l'on quitte la fenêtre,
 * enleve de notre HashMap (user<-->fenetre) l'instance de la ChatWindow associée
 * @param e 
 */
    @Override
    public void windowClosing(WindowEvent e) {
        ChatGUI.userWindow.remove(remoteUser);
    }
    
   /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowOpened(WindowEvent e) {System.out.print("");}
     /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowClosed(WindowEvent e) {System.out.print("");}
     /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowIconified(WindowEvent e) {System.out.print("");}
     /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowDeiconified(WindowEvent e) {System.out.print("");}
     /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowActivated(WindowEvent e) {System.out.print("");}
     /**
    * Méthode du window listener
    * @param e 
    */
    @Override public void windowDeactivated(WindowEvent e) {System.out.print("");}
}